1.1k 词
题目描述排序,顾名思义,是将若干个元素按其大小关系排出一个顺序。形式化描述如下:有n个元素a[1],a[2],…,a[n],从小到大排序就是将它们排成一个新顺序a[i[1]]< a[i[2]]< …< a[i[n]]i[k]为这个新顺序。选择排序的思想极其简单,每一步都把一个最小元素放到前面,如果有多个相等的最小元素,选择排位较考前的放到当前头部。还是那个例子:{3  1  5  4  2}:第一步将1放到开头(第一个位置),也就是交换3和1,即swap(a[0],a[1])得到{1  3  5  4  2}第二步将2放到第二个位置,也就是交换3和2,即swap(a[1],a[4])得到{1  2  5  4  3}第三步将3放到第三个位置,也就是交换5和3,即swap(a[2],a[4])得到{1  2  3  4  5}第四步将4放到第四个位置,也就是交换4和4,即swap(a[3],a[3])得到{1  2  3  4  5}第五步将5放到第五个位置,也就是交换5和5,即swap(a[4],a[4])得到{1  2  3  4  5}输入n个整数,输出选择...
266 词
算法一:求从后往前每次增加蟠桃数的通项公式,再累加 #include<bits/stdc++.h>using namespace std;int main(){int n,i=1,s=3,t=1;while(scanf(“%d”,&n)!=EOF){while(n>i){i=i+1;t=t+s;s=2*s;}cout<<t<<endl;i=1;s=3;t=1;}return 0;}
857 词
题目描述经典的八皇后问题,在一个$8*8$的棋盘上放置8个皇后,使得不能互相攻击到,皇后的攻击范围的同一行,同一列以及同一个斜线。要求输出所有不会互相攻击到的摆放方式,所有通过旋转,对称都方式得到的摆放方式均认为是不同的摆放方式。棋盘被编号为$0-7$行,$0-7$列。 输入无输入。 输出每行一个数字代表摆放方式,如$01234567$代表从第$0$行放在$0$列,第$1$行放在$1$列,第$2$行放在$2$列,按照升序输出。 题解123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include<bits/stdc++.h>using namespace std;#define max 8int queen[max], sum=0; void show() { int i; for(i = 0; i < max; i++) { printf("%d&...
587 词
题目描述给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No; 输入第一行有一个整数0 每组测试数据有一个正整数n<1000000; 输出如果符合条件,输出Yes,否则输出No 样例输入1232910 样例输出12YesNo 题解12345678910111213141516171819202122232425262728293031#include<iostream>using namespace std;int jc(int n){ int b=1; for(int i=1;i<=n;i++) b*=i; return b;}int main(){ int n; scanf("%d",&n); while(n--) { int m,b; cin>>m; for(int i=10;...
625 词
题目描述古希腊数学家毕达哥拉斯在自然数研究中发现,220220的所有真约数(即不是自身的约数)之和为:1+2+4+5+10+11+20+22+44+55+110=284而284的所有真约数为1、2、4、71、142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。你的任务就编写一个程序,判断给定的两个数是否是亲和数 输入输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数AA,BB; 其中 ≤A,B≤6∗105; 输出对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。 #include<bits/stdc++.h>using namespace std;int yue(int a) { int i = 1, t = 0; while (i < a) { if (a % i == 0 ) { t += i; } ...
590 词
题目描述定义$N$的双阶乘: $$N!!=N∗(N−2)∗(N−4)∗….i(i=1ori=2)$$ 比如$5!!=5∗3∗1=15$ 而$6!!=6∗4∗2=48$ 特别的我们定义$!=1!!=1$ 给定$N$你的任务是计算出$N!!$(你可以假设答案不超过$int$ 范围) 输入多组输入,每行一个整数$N$ 输出你的任务是计算出$N!!$(你可以假设答案不超过$int$ 范围) 提示:需要分奇偶分别计算 1234567891011121314151617181920212223#include<bits/stdc++.h>using namespace std;int main(){ int n,s,x; while(scanf("%d",&n)!=EOF){ s=n; if(n%2==0){ while(n>2){ ...
532 词
题目描述A/B Problem Write a program which reads two integers a and b, and calculates the following values: a ÷ b: d (in integer) remainder of a ÷ b: r (in integer) a ÷ b: f (in real number) 输入Two integers a and b are given in a line. 输出Print d, r and f separated by a space in a line. For f, the output should not contain an absolute error greater than 10^-5. 注:此题为特殊判断机制(special judge),精确到小数点后6位(long double默认精确度)即可。 #include<bits/stdc++.h>using namespace std;int main(){ long do...
550 词
题目描述组合数$Cnr(n,r)=n!/r!/(n-r)!$,虽然组合数的计算简单但也不乏有些陷阱,这主要是因为语言中的数据类型在表示范围上是有限的。更何况还有中间结果溢出的现象,所以千万要小心。 输入输入数据不超过100多组测试用例,每一行有两个整数M与N,你可以假设结果不会超过64位有符号整数,每对整数M和N满足$0≤m$, $n≤28$,以$EOF$结束。 输出输出该组合数。每个组合数换行。 样例输入1235 218 1328 28 样例输出1231085681 提示提示公式:$C(n,r)=C(n,n-r)$ 题解1#include<cstdio>using namespace std;int main() { double m, n, nn; long double s = 1; while (scanf("%lf %lf", &m, &n) != EOF) { nn = n; while (nn--) {...
380 词
问题描述对一个数十进制表示时的每一位数字乘五次方再求和,会得到一个数的五次方数 例如:1024的五次方数为1+0+32+1024=1057 有这样一些神奇的数,它的五次方数就是它自己,而且这样的数竟然只有有限多个 从小到大输出所有这样的数 输入无 输出每个数独立一行输出 #include using namespace std;int n;int wucifang(int x){ return x*x*x*x*x;} int main(){ for(int i=2;i<=194980;i++){ int sum=0,t=i; while(t){ sum+=wucifang(t%10); t/=10; } if(sum==i) cout<<i<<endl; } return 0;}
717 词
题目描述写一个函数,给定年、月、日,计算该日期是该年的第几天。在主函数中输入一个日期(含年、月、日),通过函数调用,得到该日期所对应这一年的第几天,并输出该数值。 输入三个以空格分隔的整数,分别表示该日期的年、月、日。 输出输入日期所对应这一年的第几天,一个整数,单独占一行。 #include<bits/stdc++.h>using namespace std;int main(){ int y,m,s,d=0; cin>>y>>m>>s; switch(m){ case 12 : d=d+30; m=m-1; case 11: d=d+31; m=m-1; case 10 : d=d+30; m=m-1; case 9 : d&...